#ifndef JRPC_H
#define JRPC_H

#include <cjson/cJSON.h>

#ifdef __cplusplus
extern "C" {
#endif

/* JSON-RPC 2.0版本标识 */
#define JRPC_VERSION "2.0"

/* JSON-RPC错误代码 */
#define JRPC_PARSE_ERROR     (-32700)
#define JRPC_INVALID_REQUEST (-32600)
#define JRPC_METHOD_NOT_FOUND (-32601)
#define JRPC_INVALID_PARAMS  (-32602)
#define JRPC_INTERNAL_ERROR  (-32603)
#define JRPC_SERVER_ERROR    (-32000)

//返回值是response对象
typedef cJSON* (*jrpc_proc_t)(void* data, const cJSON* request);

cJSON* jrpc_create_request(const char *method, cJSON *params, cJSON *id);
cJSON* jrpc_create_response(const cJSON* result, const cJSON* error, const cJSON* id);
cJSON* jrpc_create_error_response(int code, const char *message, const cJSON* id);
int jrpc_register_method(const char* name, jrpc_proc_t proc, void* data);
int jrpc_unregister_method(const char* name);
//返回值是response对象
cJSON* jrpc_invoke_method(cJSON* request);

#ifdef __cplusplus
}
#endif

#endif /* JRPC_H */